package controllers;

import play.*;
import play.db.DB;
import play.mvc.*;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

import javax.persistence.Entity;

import org.joda.time.Hours;

import models.*;

public class Application extends Controller {

	//Inicio
    public static void index() {
    	render();
    	
    }
    
    //sair?
    public static void inserir_horario(String horas , String data)
    {
    	
    	
    	
    }
    //sair?
    public static void Inserir_form_horario(){
    	render();
    }
    
    //método para salvar clientes
    public static void inserir_cliente(Cliente c){
    	    	    	
    	Pessoa p;
    	p=c;
    	p.save();
    	index();
    }
    
    //método para salvar funcionarios
    public static void inserir_funcionario(Funcionario f, String horas ) {
        Hours  h = null; 
    	List<Horario> horario_aux = new ArrayList();
    	String[]array = horas.split(",");
    	int aux= array.length;
    	for(int i=0;i<=aux;i++)
    	{
    		System.out.println("horas  ===="+array[i]);
    		/*int k = Integer.parseInt(array[i]);
    		Horario horarios = new Horario();
    		System.out.println("horas"+k+"  ===="+array[i]);
    		
    		h.hours(k);
    		horarios.hora = h;
    		horario_aux.add(horarios);
    		*/
    	}
    	f.hora=horario_aux;
    	f.save();
    	index();
    	
    }
    
    //método para mostrar formulario de inserçaõ de clientes
    public static void Inserir_form_cliente()
    {
    	render();
    	
    }
    
    //método para mostrar formulario de inserçaõ de funcionarios
    public static void Inserir_form_func(){
    	render();
    }
  
    //método para procura de funcionario
    public static void buscarfunc(String cpdf) throws SQLException
     {
    	 List<Pessoa> p= new ArrayList();
    		// Connection con = DB.getConnection();

    		// Statement stm = con.createStatement();
    		 String SQL = " Select * From Pessoa Where cpf = " +cpdf;
    		 ResultSet rs = DB.executeQuery(SQL);
  
    		 while(rs.next()){
    				Pessoa pe_temp = new Pessoa();
    				
    				long id = rs.getLong("id");
    				int cpf = rs.getInt("cpf");
    				String nome = rs.getString("nome");
    				String endereco = rs.getString("endereco");
    				String telefone = rs.getString("telefone");
    				String tipo = rs.getString("tipo");
    				System.out.println("cpf: " + cpf + "nome :"+nome );


    			pe_temp.id=id;
    			pe_temp.cpf=cpf;
    			pe_temp.nome=nome;
    			pe_temp.endereco=endereco;
    			pe_temp.telefone=telefone;
    			pe_temp.tipo=tipo;
    			p.add(pe_temp);
    			}
    			 
    			 render(p);
    }
    
    //método para procura de clientes
 
    public static void buscarcliente(String cpdf) throws SQLException
     {
	 List<Pessoa> p= new ArrayList();
	// Connection con = DB.getConnection();

	// Statement stm = con.createStatement();
	 String SQL = " Select * From Pessoa Where cpf = " +cpdf;
	 ResultSet rs = DB.executeQuery(SQL);

	 while(rs.next()){
	Pessoa pe_temp = new Pessoa();
	
	long id = rs.getLong("id");
	int cpf = rs.getInt("cpf");
	String nome = rs.getString("nome");
	String endereco = rs.getString("endereco");
	String telefone = rs.getString("telefone");
	String tipo = rs.getString("tipo");
	System.out.println("cpf: " + cpf + "nome :"+nome );


pe_temp.id=id;
pe_temp.cpf=cpf;
pe_temp.nome=nome;
pe_temp.endereco=endereco;
pe_temp.telefone=telefone;
pe_temp.tipo=tipo;
p.add(pe_temp);
}
 
 render(p);
        	
    }

    //método para remover registros com o "Id"
    public static void remover(long id){
		 
	 String SQL = "Delete from Pessoa where id = "+id;
	/* Pessoa p = Pessoa.findById(id);
		if (p != null){
			p.delete();*/
	DB.execute(SQL);
		index();
		
}
 
    //método para listar pessoas ou funcionario
    public static void listar(String tipo) throws SQLException
 {
	 String aux = tipo;
	 List<Pessoa> p= new ArrayList();
	 String SQL =" Select * From Pessoa Where tipo = " + aux;
	 
	 ResultSet rs = DB.executeQuery(SQL);
	 
	 while(rs.next()){
			Pessoa pe_temp = new Pessoa();
			
			long id = rs.getLong("id");
			int cpf = rs.getInt("cpf");
			String nome = rs.getString("nome");
			String endereco = rs.getString("endereco");
			String telefone = rs.getString("telefone");
			
			System.out.println("cpf: " + cpf + "nome :"+nome );


		pe_temp.id=id;
		pe_temp.cpf=cpf;
		pe_temp.nome=nome;
		pe_temp.endereco=endereco;
		pe_temp.telefone=telefone;
		pe_temp.tipo=tipo;
		p.add(pe_temp);
		}
		 System.out.println("pessoas "+p);
		render(p);
	}
 
    //método para cadastrar serviço
 
    public static void cadastroservi(String funcionario ,String nome, double valor) throws SQLException
 {
	 System.out.println("Cadastro de servico");
	 Servico servico = new Servico();
	 
	 List<Funcionario> pessoa_aux_servico=new ArrayList();
	
	List<Long> aux2= new ArrayList();
	
	long []arrayint = new long[funcionario.length()];
	 String[] array = funcionario.split(",");
	 for(int i = 0;i<array.length;i++)
	 {
		 int aux=0;
		 arrayint[i]=Long.parseLong(array[i]);
		 System.out.println("arry de int "+arrayint[i]);
		 
	
		Funcionario funcionario_novo = Funcionario.findById(arrayint[i]);		 
		aux=(int) arrayint[i];
				 
		pessoa_aux_servico.add(funcionario_novo);
		
	 }
	 servico.funcionario = pessoa_aux_servico;
	 System.out.println("pessoa"+pessoa_aux_servico);
	 System.out.println("funcionario"+servico.funcionario);
	 System.out.println("rs"+aux2);
	 
	 servico.idfuncionario=funcionario;
	 servico.valor=valor;
	 servico.nome = nome;
	 servico.save();
	 System.out.println("\n nome do serviço: "+servico.nome+"==="+"Nomes dos Funcionarios=="+pessoa_aux_servico+"valor do Serviço: =="+servico.valor+"\n\n");
	 
	
	index();
	 
 }
  
    //método para mostrar o formulário de cadastro de serviço
 
    public static void formserv()
 {
	 List<Funcionario> lp = Funcionario.find("tipo is ?", "Funcionario").fetch();
	 for (Funcionario funcionario : lp) {
	 }
	 render(lp);
 }
 
    //implementar

    public static void agendar(){
	int cont=0;
	 Funcionario funcionario = null;
	 Pessoa p;
	 List<Pessoa> pessoas = Pessoa.all().fetch();
	
	 for(int i=0;i<=pessoas.size();i++)
	 funcionario=(Funcionario) pessoas;
	 {
		if(funcionario.tipo.equals("Funcionario"))
				{cont++;}
	 System.out.println("dadad"+pessoas+"==="+funcionario.tipo+"-----"+cont);
	
	 }
	 
 }
 
    //método para listar os serviços e seus funcionários
 
    public static void listarServico() throws SQLException
 {
	 List<Servico> serv = new ArrayList();
	 List<String> Nomes = new ArrayList();
	 
	System.out.println("\nListar Servico ++==");
 
	 	String SQL = " Select * From Servico ";

	 
	 ResultSet rs = DB.executeQuery(SQL);
	 
	while(rs.next()){
		String nome = new String();
	Servico servico = new Servico();	
	servico.id=rs.getLong("id");
	servico.nome=rs.getString("nome");
	servico.valor=rs.getDouble("valor");
	serv.add(servico);
	
	String SQL2 = " Select Func_ID From Func_Res Where Serv_ID ="+servico.id;
	ResultSet rsf = DB.executeQuery(SQL2);
	
	while(rsf.next()){
		 
		String SQL3 = " Select * From Pessoa Where ID = " + rsf.getLong("Func_ID");
		ResultSet rsfu = DB.executeQuery(SQL3);
		
		while(rsfu.next()){
			
			String aux = rsfu.getString("nome");
			
			nome=nome+aux.concat(",");
			
			
			System.out.println("nome 1º :"+ aux );
			System.out.println("====== :" );
			
		}
		
		System.out.println("nome :"+ nome );
		System.out.println("Lista de nomes "+Nomes );
	}
	Nomes.add(nome);
	
	}
	
	render(serv,Nomes);
	}
}